// IFreeZzaphPostProcessorPlugin.cs
// 
// Copyright © 2009 FreeZzaph
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

using System;
using System.Collections.Generic;

namespace LibFreeZzaph
{
	
	public interface IFreeZzaphPostProcessorPlugin : IFreeZzaphPlugin
	{
		
		/// <value>
		/// Returns the description of the plugin in action. Should be short,
		/// but give the user an exact idea of what the plugin does. Should
		/// be written as an active event. An example would be "Removing
		/// duplicates". 
		/// </value>
		string Action { get; }
		
		/// <summary>
		/// Performs the desired post-processing action on the downloaded files.
		/// </summary>
		/// <param name="fileList">
		/// The list of the files that were downloaded, absolute path given.
		/// </param>
		/// <returns>
		/// The files after post-processing. As there may be multiple
		/// post-processor plug-ins working on the file set, each plug-in must
		/// provide the list of files from its processing to the next plug-in. If
		/// no changes were made, the returned file list will be identical to
		/// the parameter. A plug-in that removes files must also remove the
		/// files from the returned list. A plug-in that renames files must
		/// also change the names of the files in the returnes list. You get
		/// the idea.
		/// </returns>
		IList<string> PerformPostProcessing(IList<string> fileList);
		
	}
}
